// 从文件中读取出数据,文件名当做第二个参数
// 将参数字符串1指定的文件作为源文件，参数字符串2指定的文件作为目的文件
// 将源文件中数据读出并写入到目的文件中

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define MAXSIZE 1024	// 最大读取的元素个数

int main(int argc, char* argv[]){

	int scoreFile,targetFile;		//该变量用于记录文件操作

	int temp;

	char readBuf[MAXSIZE-1] = {0};

	// 判断输入参数是否为3，其中第二个参数需要为要读取的文件名称，参数3为目的文件
	if(argc != 3){
		// 如果参数输入错误，则退出并提示
		printf("Please input the current filename, eg.'./exam311readFun filename1 filename2' \n");
	}
	
	// 如果参数输入正确，则读取文件中的数据，read函数每次至多读取其中的一行元素
	// 进行读取时需要先打开源文件
	scoreFile = open(*(argv + 1), O_RDONLY, 0);

	if(scoreFile == -1){
		printf("源文件打开失败@");
		return -1;
	}

	// 打开目的文件
	if((targetFile = open(*(argv+2), O_RDWR | O_CREAT, S_IRWXU)) == -1){
		printf("目的文件打开失败@@");
		return -2;
	}
	
	// 如果两个文件都成功打开，则进行下一步操作
	// 创建临时数组，用来记录从文件中读取出来的数据
	char readTemp[MAXSIZE-1] = {0};
	
	// read函数每次只能读取其中一行元素,且读取的时候也会将换行符也读进去，因此无需在最后加endling
	while( (temp = read(scoreFile, readBuf, MAXSIZE)) > 0 ){
			

		// 读取出元素后，讲readBuf中的元素写入到目的文件中
		//strcat(readBuf,"\n");
		if(temp != write(targetFile, readBuf, temp)){
			printf("写入数据错误！");
			return -3;
		}
	}

	close(targetFile);
	close(scoreFile);

	return 0;	

}
